home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / DUMP.SA < prev    next >
Text File  |  1990-01-05  |  6KB  |  157 lines

  1. DUMP     IDNT      1,1       DU     Dump "S-Records"                 05/10/82
  2.  
  3.          XDEF      DUCMD
  4.          XDEF      DUMPTEMP
  5.  SPC 1
  6.          XREF      FIXBUF
  7.          XREF      FNEXTF
  8.          XREF      GETA
  9.          XREF      MACSBUG
  10.          XREF      OUT1CR
  11.          XREF.S    OUTTO                                             1,1
  12.          XREF      PNT2HX
  13.          XREF      PNT4HX
  14.          XREF      PNT6HX
  15.          XREF      P2PHY
  16.          XREF      SCANPORT
  17.          XREF      SYNTAX
  18.  PAGE
  19.          SECTION.S 0
  20. DUMPTEMP DS.B      80        HEADER TEMP BUFFER
  21.          SECTION   11
  22.  
  23.  
  24. *   ***DUMP***  DUMP  'S' RECORDS
  25. *    FORMAT:  DU  ADDRESS1 ADDRESS2  [TEXT....]
  26. *
  27. DUCMD    DS        0
  28.          BSR SCANPORT  SEE WHERE TO SEND OUTPUT (DUMMY CALL)
  29.          MOVE.L    OUTTO,D6            SAVE OUTTO FOR ACTUAL S-RECORD DUMP
  30.          CLR.L     OUTTO               OVERRIDE SCANPORT CALL
  31.  
  32.          LEA       SYNTAX(PC),A0  WHERE TO GO IF NO PARAMTERS
  33.          BSR       FNEXTF    FIND NEXT FIELD
  34.          BSR       GETA      GET ADDRESS1
  35.          MOVE.L    D0,A3     A3 = BEGIN ADDRESS
  36.  SPC 1
  37.          BSR       FNEXTF
  38.          BSR       GETA      GET ADDRESS2
  39.          MOVE.L    D0,A4     A4 = END ADDRESS
  40.  SPC 1
  41. * PROCESS HEADER
  42.          LEA       PUNCH5(PC),A0  WHERE TO GO IF NO HEADER
  43.          BSR FNEXTF  LOOK FOR HEADER
  44. PUNCH5   DS        0
  45.  SPC 1
  46. * MOVE TEXT TO 'TEMP STORAGE'
  47.          LEA       DUMPTEMP,A2
  48.          MOVE.L    A2,D5     D5 = START OF TEXT
  49. PUM11    CMP.L     A5,A6
  50.          BEQ.S     PUM13
  51.          MOVE.B    (A5)+,(A2)+  MOVE
  52.          BRA       PUM11
  53. PUM13    EXG.L     A2,D5     D5 = END OF TEXT +1
  54.  SPC 1
  55. * DISPLAY ADDRESSES
  56.          MOVE.L    A3,A0
  57.          MOVE.L    A4,A1
  58.          BSR       P2PHY     DISPLAY TWO ADDRESSES
  59.  SPC 1
  60. * INSURE END EQUAL GREATER THAN BEG
  61.          CMP.L     A3,A4
  62.          BCS       SYNTAX
  63.  SPC 1
  64.          MOVE.L    D6,OUTTO            RESTORE OPTIONAL DESTINATION OF DUMP
  65.  SPC 1
  66. * FINISH PROCESSING HEADER
  67. *  A2 = START OF TEXT
  68.          BSR FIXBUF  A5,A6=#BUFFER
  69.          MOVE.L #2,D6    THE BYTE COUNT
  70.          CLR.L D4  CLEAR THE CHECKSUM
  71.          MOVE.L #'S0??',(A6)+  START OF S RECORD
  72.          MOVE.L #'0000',(A6)+  DUMMY ADDRESS
  73. MORES0   CMP.L     D5,A2     SEE IF AT END OF TEXT
  74.          BGE.S ENDS0  WHERE TO GO WHEN ALL CHARACTERS USED
  75.          ADD.L #1,D6  ANOTHER BYTE
  76.  SPC 1
  77.          MOVE.B    (A2)+,D0  GET ANOTHER BYTE OF TEXT
  78.  SPC 1
  79.          ADD.L D0,D4  FOR CHECKSUM
  80.          BSR PNT2HX  PUT IT IN BUFFER
  81.          BRA MORES0
  82. ENDS0    DS        0
  83.  SPC 1
  84.          BSR PNTSREC  GO PRINT THE 'S' RECORD
  85.          MOVE A3,A2  A2 WILL SCAN BETWEEN A3-A4
  86. * DO ANOTHER 'S' RECORD
  87. MORESP   BSR FIXBUF  A5,A6=#BUFFER
  88.          CLR.L D4  CLEAR CHECKSUM REGISTER
  89.          MOVE.L A3,D0 READY TO PRINT ADDRESS
  90.          MOVE.L A3,D1 GET READY TO AND ADDRESS
  91.          MOVE.L #$10,D3  MAXIMUM BYTES ON S REC LINE
  92.          ADD.L D3,D1  INSURE END OF LINE ADDRESS IS MAX
  93.          AND.L #$FF0000,D1 SEE IF 3 BYTE ADDRESS
  94.          BNE.S S2REC  WHERE TO GO IF 3 BYTES NEEDED
  95.          MOVE.L #'S1??',(A6)+ PUSH
  96.          MOVE A3,D0  SET UP TO PRINT 2 BYTE ADDRESS
  97.          BSR PNT4HX  PRINT 4 HEX CHAR ADDRESS
  98.          MOVE.L #2,D6  BYTE COUNT
  99.          MOVE.W A3,D0  FIX UP CHECKSUM
  100.          ADD.B D0,D4  LOW BYTE
  101.          ASR #8,D0  SHIFT IT OVER
  102.          ADD.B D0,D4  HIGH BYTE OF ADDRESS
  103.          BRA.S PNCA3  GO PUNCH A LINE
  104.  SPC 1
  105. S2REC    MOVE.L #'S2??',(A6)+ PUSH
  106.          BSR PNT6HX  PRINT 6 HEX CHAR ADDRESS
  107.          MOVE.L #3,D6 BYTE COUNT
  108.          MOVE.L A3,D0  FIX UP CHECKSUM
  109.          ADD.B D0,D4 LOW BYTE
  110.          ASR #8,D0  SHIFT IT OVER
  111.          ADD.B D0,D4  MIDDLE BYTE
  112.          SWAP D0  SET UP FOR HIGH BYTE
  113.          ADD.B D0,D4  ADD HIGH BYTE
  114. PNCA3    CMP.L A4,A3  SEE IF AT ENDING ADDRESS
  115.  SPC 1
  116. * END OF FILE
  117.          BLE.S A3OUT  WHERE TO GO IF BELOW OR AT END ADDRESS
  118.          BSR.S PNTSRECX END IT BY PRINTING LAST RECORD
  119.          BSR FIXBUF  A5,A6=#BUFFER
  120.          CLR.L D4     CLEAR THE CHECKSUM
  121.          MOVE.L #'S9??',(A6)+  MOVE TO PRINT BUFFER
  122.          MOVE.L #'0000',(A6)+ MOVE '0000' TO PRIT BUFFER
  123.          MOVE.L #2,D6  BYTE COUNT
  124.          BSR.S PNTSREC  PRINT 'S9' END-OF-FILE RECORD
  125.          BRA MACSBUG  REENTER MACSBUG
  126.  SPC 1
  127. A3OUT    MOVE.B (A3)+,D0  GRAB THE BYTE FROM MEMORY
  128.          ADD.W D0,D4 ADD TO CHECKSUM
  129.          ADD.W #1,D6 BUMP THE BYTE COUNT
  130.          ADD.L #1,A1 ADD TO COUNT OF BYTES PROCESSED
  131.          BSR PNT2HX  PUT THE HEX IN THE PRINT BUFFER
  132.          SUB.L #1,D3       COUNT DOWN CHAR TO GO IN LINE 
  133.          BNE PNCA3
  134.          BSR.S PNTSREC  END OF LINE-PUNCH IT
  135.          BRA MORESP  GO FIX UP NEXT LINE
  136.  SPC 1
  137. * FIX UP & PRINT THE 'S' RECORD/LINE
  138. *
  139. PNTSRECX CMP.W #0,A1    SEE IF ANY CHAR MOVED
  140.          BEQ.S     PNTSRTS   NO CHAR MOVED
  141.  SPC 1
  142. PNTSREC  ADD #1,D6 ONE MORE BYTE (CHECKSUM)
  143.          ADD.W D6,D4  ADD BYTE COUNT TO CHECKSUM
  144.          NOT.B D4 COMPLIMENT THE CHECKSUM
  145.          MOVE.L D4,D0  READY FOR PRINT-HEX
  146.          BSR PNT2HX  PUT CHECKSUM IN RECORD
  147.          MOVE.L A6,D7  SAVE FOR THE MOMENT
  148.          MOVE.L A5,A6  START OF BUFFER
  149.          ADD.L #2,A6 BYPASS RECORD TYPE (4 CHAR)
  150.          MOVE.B D6,D0  SET UP BYTE COUNT FOR PNTHEX ROUTINE
  151.          BSR PNT2HX  PUT THE BYTE COUNT IN THE PRINT BUFFER
  152.          MOVE.L D7,A6  RESTORE REAL END OF BUFFER
  153.          BSR OUT1CR  DO THE ACTUAL DISPLAY/PUNCH 
  154.          SUB.L A1,A1  CLEAR COUNTER OF BYTES PROCESSED
  155. PNTSRTS  RTS
  156.  SPC 3
  157.          END